/**
 * 简单的事件总线，用于组件间通信
 */
class EventBus {
  private events: { [key: string]: Function[] } = {}

  /**
   * 订阅事件
   * @param event 事件名称
   * @param callback 回调函数
   */
  on(event: string, callback: Function) {
    if (!this.events[event]) {
      this.events[event] = []
    }
    this.events[event].push(callback)
  }

  /**
   * 取消订阅
   * @param event 事件名称
   * @param callback 回调函数
   */
  off(event: string, callback?: Function) {
    if (!this.events[event]) return

    if (!callback) {
      // 如果没有提供回调函数，则删除该事件的所有监听器
      delete this.events[event]
    } else {
      // 否则只删除特定的回调函数
      this.events[event] = this.events[event].filter(fn => fn !== callback)
    }
  }

  /**
   * 触发事件
   * @param event 事件名称
   * @param args 传递给回调函数的参数
   */
  emit(event: string, ...args: any[]) {
    if (!this.events[event]) return

    this.events[event].forEach(callback => {
      callback(...args)
    })
  }
}

// 导出单例
export const eventBus = new EventBus()